//user路由器
const express = require('express');
//引入mysql连接池
const pool = require('../pool.js');
//console.log(pool);
//创建路由器对象
const router = express.Router();
//添加注册路由(post /reg)响应{code:200,msg:'注册成功'}
//http://127.0.0.1:8000/v1/users/reg
//1.用户注册
router.post('/reg',(req,res,next)=>{
	let obj = req.body;
	console.log(obj);
	//验证数据是否为空obj.uname===''
	if (!obj.uname){
		//json方法将js对象转换为json对象
		res.send({code:401,msg:'uname不能为空'});
		//阻止往后执行
		return;
	}
	if (!obj.upwd){
		//json方法将js对象转换为json对象
		res.send({code:401,msg:'upwd不能为空'});
		//阻止往后执行
		return;
	}
	if (!obj.email){
		//json方法将js对象转换为json对象
		res.send({code:401,msg:'email不能为空'});
		//阻止往后执行
		return;
	}
	if (!obj.phone){
		//json方法将js对象转换为json对象
		res.send({code:401,msg:'phone不能为空'});
		//阻止往后执行
		return;
	}
	//验证手机号码格式
	//正则表达式.test手机号码
	//如果手机号码格式不正确
	if(!/^1[3-9]\d{9}$/.test(obj.phone)){
		res.send({code:401,msg:'手机号码格式错误'});
		return;
	}	
	//执行SQL语句判断用户是否存在
	pool.query('select uname from xz_user where uname=? ',[obj.uname],(err,result)=>{
		if(err){
		next(err);
		return;
		}
		if(result.length===0){
		//执行SQL语句插入数据
			pool.query('insert into xz_user set?',[obj],(err,result)=>{
			if(err) {
			   //如果数据库执行错误。交给下一个错误处理的中间件
				next(err);
				//阻止往后执行
				return;
			}
				console.log(result);
				res.send({"code":200,"msg":'注册成功'});	
			});
			}else{
				res.send({"code":400,"msg":'已占用'});
			}
		});
	});
//导出路由器
//添加登录路由(post /login)
//2.用户登录
router.post('/login',(req,res,next)=>{
	//检查是否为空
	let obj = req.body;
	//console.log(obj);
	if (!obj.uname){
			res.send({code:401,msg:'uname不能为空'});
			//阻止往后执行
			return;
	}
	if (!obj.upwd){
			res.send({code:401,msg:'upwd不能为空'});
			//阻止往后执行
			return;
	}
	//查询用户名和密码同时匹配数据就登录成功
	pool.query('select * from xz_user where uname=? and upwd=? ',[obj.uname,obj.upwd],(err,result)=>{
		if(err){
		//如果有错误  交给下一个中间件处理
		next(err);
		return;
		}
		console.log(result);
		//查询的结果是数组，如果是空数组 说明登录失败，否则登录成功
		if(result.length===0){
		res.send({code:201,msg:'登录失败'});
		}
		else{
		res.send({code:200,msg:'登录成功'});
		}
		
	});
	
		//console.log(obj);

});
//3.修改用户(put /)
//http://127.0.0.1:8080/v1/users/
router.put('/',(req,res,next)=>{
	//3.1获取post传递的数据(uid,email,phone,user_name,gender)
	let obj = req.body;
	//3.2验证各项数据是否为空
	let i = 400;//记录状态码的
	for(let k in obj){
		//每次遍历一个属性i加1
		i++;
		//k 属性名 obj[k] 属性值
		//console.log(k,obj[k]);
		//如果属性值为空，提示属性名这项不能为空
		if(!obj[k]){
			res.send({code:i,msg:`${k}不能为空`});
			return;
		}
	}
	//3.3执行SQL命令，修改用户的数据
	pool.query('update xz_user set ? where uid=?',[obj,obj.uid],(err,result)=>{
	if(err){
	next(err);
	return;
	}
	console.log(result);
	//结果是对象，如果对象下的affectedRows的值是0说明修改失败，否则成功
	if(result.affectedRows===0){
		res.send({code:201,msg:'修改失败'});
	}else{
	res.send({code:200,msg:'修改成功'});
	}
	});
	
});
//4.查找用户
//http://127.0.0.1:8080/v1/users/3
router.get('/:uid',(req,res,next)=>{
	//4.1获取路由传参的数据
	let obj = req.params;
	console.log(obj);
	//4.2执行SQL语句，查找编号对应的用户
	pool.query('select uid,uname,email,phone from xz_user where uid=?',[obj.uid],(err,result)=>{
	if(err){
	//交给下一个中间件处理
	next(err);
	return;
	}
	console.log(result);
	//结果是数组，如果是空数组说明该用户不存在，否则查找到了
	if(result.length===0){
	res.send({code:201,msg:'查找失败'});
   }else{
   res.send({code:200,msg:'查找成功',data:result});
   }
	
	});

});
//5.删除用户
//http://127.0.0.1:8080/v1/users/3
router.delete('/:uid',(req,res,next)=>{
	//5.1获取路由传参的值
	let obj = req.params;
	//5.2执行SQL语句，删除对应编号的用户
	pool.query('delete from xz_user where uid=?',[obj.uid],(err,result)=>{
	//5.3结果是对象，如果对象下的affectedRows的值是0说明删除失败
	if(result.affectedRows===0){
	res.send({code:201,msg:'删除失败'});
	}else{
	res.send({code:201,msg:'删除成功'});
	}
	});
});
module.exports = router;
//6.用户列表(get /)
//http://127.0.0.1:8080/v1/users/
router.get('/',(req,res,next)=>{
	//6.1获取查询字符串(get)传递的数据
	let obj = req.query;
	console.log(obj);
	
	//6.2验证是否为空，如果为空设置默认值
	if(!obj.pno){
		obj.pno = 1;
	}
	if(!obj.count){
		obj.count = 5;
	}
	console.log(obj);
	//6.3计算开始查询的值,开始查询=(当前页码-1)*每页数量
	let start = (obj.pno-1)*obj.count;
	//6.4将每页的数据量转为数值型
	let size = parseInt(obj.count)
	
	//6.5执行SQL命令(分页查询)
	pool.query('select uid,uname,email,phone from xz_user limit ?,?',[start,size],(err,result)=>{
		if(err){
		next(err);
		return;
		}
		//查询的结果是数组套对象
		//console.log(result);
		//查询的结果是数组，把数组响应给浏览器端
		res.send({code:200,msg:'查找成功',data:result});
	});
});
